/**
 * @author zhangshuai
 * @version V1.0
 * @Project Java2_26
 * @Package PACKAGE_NAME
 * @Description:
 * @Date 2025/5/13 14:43
 */
//继承
public class Animals {
    /* * 继承相关的概念：
     * 	1：子类：继承了其他的类的类。还可以称为：衍生类|派生类。
     * 	2：父类：被继承的类。还可以称为：超类|基类。
     * 	3：继承：
     * 		可以在子类中直接访问父类的成员的过程。*/

    //先有子类，还是先有父类？
    //先有子类，再有父类。父类是子类的共有的属性和行为，将公共的属性和行为提取出来，放在父类中，子类继承父类，子类就可以直接访问父类的属性和行为。

    //方法的重写：
    //子类继承父类的方法，但是子类的方法和父类的方法的方法名，参数列表，返回值类型，修饰符都一样，但是方法体不一样，这种情况称为方法的重写。
   //方法的重载：
    //方法的重载：方法名必须一致，返回值类型，参数类型，参数的个数可以不一致

    /*super：超级的。
     * 	1：super 是java的关键字。
     * 	2：在子类的方法中使用。
     * 作用：
     * 	1：在子类中通过super. 可以访问父类被子类重写的方法。
     * 	2：在子类中通过super. 可以访问父类中被子类隐藏的成员变量。（情况很少）
     * 	3：在子类的构造方法的第一句，必须是使用 super(实参列表)调用父类的构造方法，以完成子类对象中包含的父类的实例成员变量的初始化工作。
    * */

    //成员变量
    private String name;
    private int age;
    private String gender;

    //getter  和 setter 方法
    //getter 方法：获取成员变量的值
    //setter 方法：设置成员变量的值

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    //成员方法
    public void eat(){
        System.out.println(name + "正在吃");
    }

    public static void main(String[] args) {

        Object object = new Object();
        /*Object 中定义的方法介绍：
         *		1：public String toString(): 获取当前对象的字符串表示形式。
         *		2：public boolean equals(Object o):判断两个对象是否相等。
         *		3：public int hashCode():返回对象的哈希码（内存地址）。
         *		4：public Class getClass():返回当前对象的 Class 对象。
         *		5：protected void finalize(): 对象的临终遗言方法。
         *		6：protected Object clone(): 复制对象。
         *		7：public void wait(): 让当前线程 在当前对象上等待。
         *		8：public void notify(): 唤醒在当前对象上等待的某一个线程。
         *		9：public void notifyAll():唤醒在当前对象上等待的所有的线程。*/

        Cat cat = new Cat();
        cat.setName("Tom");
        cat.setAge(3);
        cat.setAge(18);
        cat.eat();
        cat.color = "白色";
        cat.catchMouse();
        System.out.println("---------------------");
        System.out.println(cat.getName()+cat.getAge()+cat.getGender()+cat.color);
        System.out.println(cat.toString());
        System.out.println(cat.hashCode());



        /*Dog dog = new Dog();
        dog.name = "旺财";
        dog.age = 5;
        dog.gender = "男";
        dog.eat();
        dog.size = 1.0;
        dog.lookDoor();
        System.out.println("---------------------");
        System.out.println(dog.name+dog.age+dog.gender+dog.size);*/



    }


}
//猫类
class Cat extends Animals{
    //成员变量
    String color;
    //成员方法

    public Cat(){

    }
    public void catchMouse(){
        System.out.println( "正在抓老鼠");
    }
    @Override
    public void eat(){
        super.eat();
        System.out.println(  "正在吃鱼");

    }

    /*@Override
    public String toString() {
        return "Cat{" +
                "color='" + color + '\'' +
                ", name='" +  + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }*/
}

//狗类

class Dog extends Animals{
    //成员变量
    Double size;
    //成员方法
    public void lookDoor(){
        System.out.println(  "正在看门");
    }
    @Override
    public void eat(){
        System.out.println( "正在吃狗粮");
    }

  /*  @Override
    public String toString() {
        return "Dog{" +
                "size=" + size +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';*/

}



